
grammar RuleSet; //程序名称和.g4名称一致即可
@header {        //一种action,定义生成的词法语法解析文件的头，当使用java的时候，生成的类需要包名，可以在这里统一定义
 package com.taotao.antlr4.sql;
 }



/*
 在Antlr4中的规则文件一般由两部分组成，小写字母定义的叫做语法，大写字母定义的叫词法，
 词法一般以固定的字符或正则进行描述，语法中可以使用词法，通常会用一次词法的组合来描述一个语法。

使用【小写字母名称+英文冒号+规则】的方式来定义一个语法。用|来分割多个规则，
每个规则后面可以用【#+空格+名称】的方式来为规则取一个别名，该别名后续会生成一个方法名。
别名是可选项，但是需要注意的是如果一个语法下有多个规则时，一旦给其中一个规则定义了别名，
剩下的都必须定义，否则生成代码文件时会报错。以上述文件为例，定义了#mul
那么下面的#div 、#add 、# sub、#number别名都是必须定义的。
*/
// 产生式
calcu: NUMBER MUL NUMBER                          # mul
     | NUMBER DIV NUMBER                          # div
     | NUMBER ADD NUMBER                          # add
     | NUMBER SUB NUMBER                          # sub
;

// 词法
WS : [ \t\n\r]+ -> skip ; // ->skip表示antlr4在分析语言的文本时，符合这个规则的词法将被无视
ADD : '+' ;
SUB : '-' ;
MUL : '*' ;
DIV : '/' ;
NUMBER : '-'? [0-9]+('.'([0-9]+)?)? ;        // 数字正则
